#pragma once

#define CR_UNUSED(a)	(void)(a)
#define CR_UNUSED2(a,b)	(void)(a); (void)(b)
#define CR_UNUSED3(a,b,c)	(void)(a); (void)(b); (void)(c)
#define CR_UNUSED4(a,b,c,d)	(void)(a); (void)(b); (void)(c); (void)(d)
#define CR_UNUSED5(a,b,c,d,e)	(void)(a); (void)(b); (void)(c); (void)(d); (void)(e)
#define CR_UNUSED6(a,b,c,d,e,f)	(void)(a); (void)(b); (void)(c); (void)(d); (void)(e); (void)(f)
#define CR_UNUSED7(a,b,c,d,e,f,g)	(void)(a); (void)(b); (void)(c); (void)(d); (void)(e); (void)(f); (void)(g)
#define CR_UNUSED8(a,b,c,d,e,f,g,h)	(void)(a); (void)(b); (void)(c); (void)(d); (void)(e); (void)(f); (void)(g); (void)(h)

namespace cr
{
	template <typename T>
	inline void ClearObject(cr::Handle<T> hObj)
	{
		memset(hObj.GetPtr(), 0, sizeof(T));
	}

	template <typename T>
	inline void ClearObject(T& obj)
	{
		memset(&obj, 0, sizeof(T));
	}
}